package com.itheima.service;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.R;
import com.itheima.api.PmsProductAttributeApi;
import com.itheima.api.PmsProductAttributeCategoryApi;
import com.itheima.api.PmsProductCategoryAttributeRelationApi;
import com.itheima.dto.PmsProductAttributeParam;
import com.itheima.dto.ProductAttrInfo;
import com.itheima.pojo.db.PmsProductAttribute;
import com.itheima.pojo.db.PmsProductAttributeCategory;
import com.itheima.pojo.db.PmsProductCategoryAttributeRelation;
import com.itheima.vo.PageResult;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * @author chensen
 * @create 2022/10/13/10:25
 */
@Service
public class PmsProductAttributeService {
    @DubboReference
    private PmsProductCategoryAttributeRelationApi pmsProductCategoryAttributeRelationApi;
    @DubboReference
    private PmsProductAttributeApi pmsProductAttributeApi;
    @DubboReference
    private PmsProductAttributeCategoryApi pmsProductAttributeCategoryApi;
    public R getInfo(Long productCategoryId) {
        List<PmsProductCategoryAttributeRelation> list = pmsProductCategoryAttributeRelationApi.selectList(productCategoryId);
        List<Long> productAttributeIds = CollUtil.getFieldValues(list, "productAttributeId", Long.class);
        List<PmsProductAttribute> pmsProductAttributes = pmsProductAttributeApi.selectList(productAttributeIds);
        List<ProductAttrInfo> result = new ArrayList<>();
        if (ObjectUtil.isNotEmpty(pmsProductAttributes)) {
            for (PmsProductAttribute pmsProductAttribute : pmsProductAttributes) {
                ProductAttrInfo info = new ProductAttrInfo();
                info.setAttributeId(pmsProductAttribute.getId());
                info.setAttributeCategoryId(pmsProductAttribute.getProductAttributeCategoryId());
                result.add(info);
            }
        }
        return R.success(result);
    }


    public R create(PmsProductAttributeParam productAttributeParam) {
        PmsProductAttribute pmsProductAttribute = new PmsProductAttribute();
        BeanUtils.copyProperties(productAttributeParam, pmsProductAttribute);
        pmsProductAttributeApi.insert(pmsProductAttribute);

        PmsProductAttributeCategory productAttributeCategory = pmsProductAttributeCategoryApi.selectOne(productAttributeParam.getProductAttributeCategoryId());
        if (pmsProductAttribute.getType() == 0) {
            productAttributeCategory.setAttributeCount(productAttributeCategory.getAttributeCount() + 1);
        } else if (pmsProductAttribute.getType() == 1) {
            productAttributeCategory.setParamCount(productAttributeCategory.getParamCount() + 1);
        }
        pmsProductAttributeCategoryApi.updateById(productAttributeCategory);
        return R.success("新增成功!");
    }

    public R delete(List<Long> ids) {
        PmsProductAttribute pmsProductAttribute = pmsProductAttributeApi.selectOne(ids.get(0));
        Integer type = pmsProductAttribute.getType();
        int count = pmsProductAttributeApi.delete(ids);

        PmsProductAttributeCategory pmsProductAttributeCategory = pmsProductAttributeCategoryApi.selectOne(pmsProductAttribute.getProductAttributeCategoryId());
        if (type == 0) {
            if (pmsProductAttributeCategory.getAttributeCount() >= count) {
                pmsProductAttributeCategory.setAttributeCount(pmsProductAttributeCategory.getAttributeCount() - count);
            } else {
                pmsProductAttributeCategory.setAttributeCount(0);
            }
        } else if (type == 1) {
            if (pmsProductAttributeCategory.getParamCount() >= count) {
                pmsProductAttributeCategory.setParamCount(pmsProductAttributeCategory.getParamCount() - count);
            } else {
                pmsProductAttributeCategory.setParamCount(0);
            }
        }
        pmsProductAttributeCategoryApi.updateById(pmsProductAttributeCategory);

        return R.success("删除成功");
    }

    public R list(Long cid, Integer type, Integer pageNum, Integer pageSize) {
        IPage<PmsProductAttribute> page = new Page<>(pageNum, pageSize);
        IPage<PmsProductAttribute> pageL = pmsProductAttributeApi.selectPage(page, type, cid);
        return R.success(PageResult.init(pageL));
    }

    public R update(Long id, PmsProductAttributeParam productAttributeParam) {
        PmsProductAttribute pmsProductAttribute = new PmsProductAttribute();
        pmsProductAttribute.setId(id);
        BeanUtils.copyProperties(productAttributeParam, pmsProductAttribute);
        int count = pmsProductAttributeApi.updateById(pmsProductAttribute);
        if (count > 0) {
            return R.success("修改成功");
        }
        return R.error("修改失败！");
    }

    public R getItem(Long id) {
        PmsProductAttribute pmsProductAttribute = pmsProductAttributeApi.selectOne(id);
        return R.success(pmsProductAttribute);
    }
}
